iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
自我挑戰組

一個令我自豪的App完成之路系列 第 29

日曆功能更新 Day29

  • 分享至 

  • xImage
  •  

新增日曆的功能

點選日期,可以讓區間內的Cell的顏色變成灰色

讓操作可以更直覺

didselectItemat內使用

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

條件列出:

變數:

  • smalltap:目前最小
  • tap:當前觸碰
  • bigtap:目前最大
  • visited:作為是否為有區間
  • store:作為暫存
  • day:計算總共幾天
  • count:計算當前是否第一次參與

條件選擇:

  1. 點選區間,計算幾天,區間內的cell都會變色
  2. 第3次點選,如果比第一次的區間大(目前觸碰 = 新的最大),那麼會用(目前最大)到(新的最大)
  3. 第3次點選,如果比第一次的區間小(目前觸碰 = 新的最小),那麼會用(目前最小)到(新的最小)
  4. 第3次點選,如果在第一次的區間內,那麼會用(目前最小)到(當前觸碰)
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
		
		// 作為點選的cell對象
		selectItem = collectionView.cellForItem(at: indexPath)!
        // 當前點選對象
        var tap = indexPath.row
        // 計算是否第一次參與 如果count = 1 那麼則是第一次參與
        count += 1
        if count == 1{
		    smalltap = tap
			// 點選第一個cell變成灰色
            selectItem.backgroundColor = UIColor.gray
		}else
		{
			// 如果visited過了那麼就是已經有產生區間
            if visted == false{
                if tap < smalltap{
                    // 轉換tap與smalltap
					store = smalltap
					smalltap = tap
					tap = store
					// 計算總共幾天
					day = tap - smalltap+1
					// 讓目前區間都變成灰色
					for i in smalltap...tap{
                        selectItem = collectionView.cellForItem(at: [0,i])!
                        selectItem.backgroundColor = UIColor.gray
                    }
                count = 1
                // 讓目前最大變成當前觸碰
                bigtap = tap
                // 讓textfield的文字變成 總共幾天累積
                countDay.text = String(day)

           }else
           {
                day = tap - smalltap+1
                for i in smalltap...tap{
                    selectItem = collectionView.cellForItem(at: [0,i])!
                    selectItem.backgroundColor = UIColor.gray
				}
				count = 1
				bigtap = tap
				countDay.text = String(day)
           }
           // 有區間產生訊號產生
           visted = true
			
           // 在有區間產生的狀況下
		}else
		{  
            // 如果當前觸碰是比目前最小還要小的時候
			if tap < smalltap{
                store = smalltap
                smalltap = tap
                tap = store
                day = tap - smalltap+1
                // 讓 目前最小到當前觸碰都變成灰色
                for i in smalltap...tap{
                    selectItem = collectionView.cellForItem(at: [0,i])!
                    selectItem.backgroundColor = UIColor.gray
                }
                // 讓 當前觸碰到目前最大顏色都變不見
                for i in tap+1...bigtap{
                    selectItem = collectionView.cellForItem(at: [0,i])!
                    selectItem.backgroundColor = .clear
                }
                bigtap = tap
                countDay.text = String(day)
                count = 1
           
            // 如果當前觸碰比目前最大還要大的時候
            }else if (tap > bigtap)
            {
                store = bigtap
                bigtap = tap
                tap = store
                day = bigtap - tap + 1
                for i in tap...bigtap{
                    selectItem = collectionView.cellForItem(at: [0,i])!
                    selectItem.backgroundColor = UIColor.gray
                }
                for i in smalltap...tap-1{
                    selectItem = collectionView.cellForItem(at: [0,i])!
                    selectItem.backgroundColor = .clear
                }
                smalltap = tap
                countDay.text = String(day)
                count = 1
           
           // 如果當前觸碰介於目前最大跟目前最小之間         
           }else if (smalltap < tap) && (tap < bigtap)
           {
                day = tap - smalltap + 1
                // 讓目前最小到當前觸碰的區間變成灰色
                for i in smalltap...tap{
                    selectItem = collectionView.cellForItem(at: [0,i])!
                    selectItem.backgroundColor = UIColor.gray
                }
                // 讓當前觸碰到目前最大的區間的顏色變不見
                for i in tap+1...bigtap{
                    selectItem = collectionView.cellForItem(at: [0,i])!
                    selectItem.backgroundColor = .clear
                }
                countDay.text = String(day)
                bigtap = tap
                count = 1
            }
        }
        }
}

成果展示:

https://i.imgur.com/FVZdD0b.gif


上一篇
TableView與Tap手勢衝突解決 Day28
下一篇
App生命週期使用時機 Day 30
系列文
一個令我自豪的App完成之路32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言